#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <iostream>
using namespace std;
//typedef __int64 lld;
typedef long long lld;
lld p,w;
lld jc[15555][2000];
const int maxn =15555;

lld isprime[maxn],prime[maxn],pnum=0,to[maxn];
void getprime(int len)
{
    int i,j;
    memset(isprime,0,sizeof(isprime));
    isprime[1]=1ll;
    pnum=0;
    for(i=2 ; i<=len; i++)
    {
        if(!isprime[i])    
        {
            prime[pnum]=i;//0到pnum-1个
            to[i]=pnum;
            pnum++;
        }
        for(j=0; j<pnum && prime[j]*i<=len; j++)
        {
            isprime[prime[j]*i]=1ll;
        }
    }
}
void init()
{
    
     for(lld j=0; j<pnum;j++)
     {
          jc[0][j]=1;
         for (lld i=1;i<=prime[j];i++) 
         {
             jc[i][j]=jc[i-1][j]*i%prime[j];
         }
     }
}
/****************************************/
lld Pow_mod(lld x,lld cf){
    if (cf==0) return 1;
    lld res=Pow_mod(x,cf/2);
    res=res*res%p;
    if (cf%2) res=res*x%p;
    return res;
}

lld C(lld m,lld n){
    if (n>m) return 0;
    return jc[m][w]*Pow_mod(jc[n][w]*jc[m-n][w]%p,p-2)%p;
}

lld solve(lld m,lld n){
    if (n==0) return 1;
    return C(m%p,n%p)*solve(m/p,n/p)%p;
}
/****************************************/
int main(){
    lld Tc,i,m,n,k;int cas=0;
    getprime(10001);
    init();
    while(scanf("%I64d%I64d%I64d", &n, &k, &p) == 3)
    //while(cin >> n >> k >> p)
    {
        if (k+k>n)
            k=n-k;
          m=n-k;
          w=to[p];
        printf("Case #%d: %I64d\n",++cas,(solve(m+k+1,m+1)+m)%p);
         //cout <<"Case #" <<  ++cas << ": " << (solve(m+k+1,m+1)+m)%p << endl;
    }
    return 0;
}
